package com.dudu.controller;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import com.dudu.bean.ParamBean;
import com.dudu.bean.UserBean;
import com.dudu.enumeration.OperateTypeEnum;
import com.dudu.enumeration.StatusEnum;
import com.dudu.service.IIsvService;
import com.dudu.service.ILogService;
import com.dudu.service.IUserService;
import com.dudu.service.impl.IsvServiceImpl;
import com.dudu.service.impl.LogService;
import com.dudu.service.impl.UserServiceImpl;
import com.dudu.utils.Encrypt;

import core.CoreService;

/**
 * 用户
 * 
 * @author gaoxs
 * 
 */
public class UserController extends CoreService implements IUserController {
    // 当前登陆用户
    private final String KEY_CURRENT_USER = "key_current_user";
    // 当前登陆用户类型
    private final String KEY_CURRENT_USER_TYPE = "key_current_user_type";
    // 用户相关
    private IUserService userService = new UserServiceImpl();
    // ISV相关
    private IIsvService isvService = new IsvServiceImpl();
    // 用于记录相应接口调用的日志
    private ILogService logService = new LogService();

    /**
     * 查询所有用户
     * 
     * @return
     */
    public String queryAllUser() {
	// 最后返回的对象
	JSONObject object = new JSONObject();
	// 获取当前登录用户信息
	UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
	// 判断如果用户信息不为空则继续下一步
	if (currentUser != null) {
	    JSONArray jsonArray = new JSONArray();
	    // 查询所有用户
	    List<JSONObject> roles = userService.queryAll();
	    jsonArray = JSONArray.fromObject(roles);
	    // 设置返回值
	    JSONObject dataobject = new JSONObject();
	    object.put("flag", "000000");
	    object.put("desc", "success");
	    dataobject.put("totalItemNum", roles.size());
	    dataobject.put("items", jsonArray);
	    object.put("data", dataobject);
	} else {
	    object.put("flag", "100000");
	}
	return returnData(object.toString());
    }

    /**
     * 新增用户
     * 
     * @return
     */
    public String doInsertUser() {
	// 最后返回的对象
	JSONObject object = new JSONObject();
	// 获取当前登录用户信息
	UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
	// 判断如果用户信息不为空则继续下一步
	if (currentUser != null) {
	    String dataStr = (String) this.getRequest().getParameter("data");
	    JSONObject data = JSONObject.fromObject(dataStr);
	    String account = data.getString("account");// 登录账号
	    String name = data.getString("name");// 名称
	    String email = data.getString("email");// 邮箱
	    String status = data.getString("status");// 状态
	    String type = data.getString("type");// 用户类型：系统用户、ISV用户
	    String isv_id = data.getString("isv_id");// ISVID
	    String isv_name = "";
	    if (StringUtils.isNotBlank(isv_id)) {
		// 根据isv_id获取Isv_Name
		isv_name = this.isvService.queryIsvNameById(isv_id);
	    }
	    // 获取用户信息
	    UserBean tempUser = userService.getUserByAccount(account);
	    if (tempUser != null) {
		object.put("flag", "200000"); // account重复
	    } else {
		UserBean user = new UserBean();
		user.setAccount(account);// 登录账号
		user.setName(name);// 姓名
		user.setPassword(Encrypt.md5Encrypt("123456")); // 默认密码
		user.setEmail(email);// 邮箱
		user.setStatus(status);// 状态
		user.setType(type);// 用户类型：系统用户、ISV用户
		user.setIsv_id(isv_id);// ISVID
		user.setIsv_name(isv_name);// Isv_Name

		int pId = this.userService.insertUser(user);// 新增用户

		logService.log(OperateTypeEnum.ADD.getKey(), currentUser.getId(), currentUser.getName(), "t_user", "名称：" + name + "|账号：" + account + "|邮箱：" + email + "|状态："
			+ status + "|类型：" + type + "|isv_id：" + isv_id + "|isv_name：" + isv_name + "|主键：" + pId);

		object.put("flag", "000000");
		object.put("desc", "success");
	    }
	} else {
	    object.put("flag", "100000");
	}

	return returnData(object.toString());
    }

    /**
     * 修改用户
     * 
     * @return
     */
    public String doEditUser() {
	// 最后返回的对象
	JSONObject object = new JSONObject();
	// 获取当前登录用户信息
	UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
	// 判断如果用户信息不为空则继续下一步
	if (currentUser != null) {
	    String dataStr = (String) this.getRequest().getParameter("data");
	    JSONObject data = JSONObject.fromObject(dataStr);
	    String userid = data.getString("userid");// 用户ID
	    String account = data.getString("account");// 登录账号
	    String name = data.getString("name");// 姓名
	    String email = data.getString("email");// 邮箱
	    String status = data.getString("status");// 状态
	    String type = data.getString("type");// 用户类型：系统用户、ISV用户
	    String isv_id = data.getString("isv_id");// ISVID
	    String isv_name = "";// Isv_Name
	    if (StringUtils.isNotBlank(isv_id)) {
		// 根据isv_id获取Isv_Name
		isv_name = this.isvService.queryIsvNameById(isv_id);
	    }

	    if (StringUtils.isNotBlank(userid)) {
		UserBean user = new UserBean();
		user.setId(Integer.valueOf(userid));// 用户ID
		user.setAccount(account);// 登录账号
		user.setName(name);// 姓名
		user.setEmail(email);// 邮箱
		user.setStatus(status);// 状态
		user.setType(type);// 用户类型：系统用户、ISV用户
		user.setIsv_id(isv_id);// ISVID
		user.setIsv_name(isv_name);// Isv_Name

		int pId = this.userService.updateUser(user);// 更新用户

		logService.log(OperateTypeEnum.EDIT.getKey(), currentUser.getId(), currentUser.getName(), "t_user", "名称：" + name + "|邮箱：" + email + "|状态：" + status + "|类型：" + type
			+ "|isv_id：" + isv_id + "|isv_name：" + isv_name + "|主键：" + pId);
	    }
	    object.put("flag", "000000");
	    object.put("desc", "success");
	} else {
	    object.put("flag", "100000");
	}

	return returnData(object.toString());
    }

    /**
     * 更新用户状态(启动/禁用)
     * 
     * @return
     */
    public String doUpdateUserStatus() {
	// 最后返回的对象
	JSONObject object = new JSONObject();
	// 获取当前登录用户信息
	UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
	// 判断如果用户信息不为空则继续下一步
	if (currentUser != null) {
	    // 获取参数用户ID
	    String userid = this.getRequest().getParameter("userid");
	    if (StringUtils.isNotBlank(userid)) {
		// 根据用户ID获取用户对象
		UserBean user = this.userService.queryById(Integer.valueOf(userid));
		if (StatusEnum.ON.getKey().equals(user.getStatus())) {
		    user.setStatus(StatusEnum.OFF.getKey());// 设置停用
		} else {
		    user.setStatus(StatusEnum.ON.getKey());// 设置启用
		}
		this.userService.updateUser(user);// 更新用户

		logService.log(OperateTypeEnum.EDIT.getKey(), currentUser.getId(), currentUser.getName(), "t_user", "状态：" + user.getStatus() + "|主键：" + userid);
	    }
	    object.put("flag", "000000");
	    object.put("desc", "success");
	} else {
	    object.put("flag", "100000");
	}

	return returnData(object.toString());
    }

    /**
     * 重置密码
     * 
     * @return
     */
    public String doResetPasswod() {
	// 最后返回的对象
	JSONObject object = new JSONObject();
	// 获取当前登录用户信息
	UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
	// 判断如果用户信息不为空则继续下一步
	if (currentUser != null) {
	    // 获取参数用户ID
	    String userid = this.getRequest().getParameter("userid");
	    if (StringUtils.isNotBlank(userid)) {
		// 根据用户ID获取用户对象
		UserBean user = this.userService.queryById(Integer.valueOf(userid));
		// 设置默认密码
		user.setPassword(Encrypt.md5Encrypt("123456")); // 重置密码
		this.userService.updateUser(user);// 更新用户

		logService.log(OperateTypeEnum.EDIT.getKey(), currentUser.getId(), currentUser.getName(), "t_user", "重置密码：" + user.getPassword() + "|主键：" + userid);
	    }
	    object.put("flag", "000000");
	    object.put("desc", "success");
	} else {
	    object.put("flag", "100000");
	}

	return returnData(object.toString());
    }

    /**
     * 查询ISV
     * 
     * @return
     */
    public String queryIsv() {
	// 最后返回的对象
	JSONArray jsonArray = new JSONArray();
	// 获取当前登录用户信息
	UserBean currentUser = (UserBean) this.getSession().getAttribute(KEY_CURRENT_USER);
	// 判断如果用户信息不为空则继续下一步
	if (currentUser != null) {
	    List<ParamBean> citys = new ArrayList<ParamBean>();
	    citys = isvService.queryIsvItems(null, null, 1, 50);
	    if (citys != null) {
		jsonArray = JSONArray.fromObject(citys);
	    }
	}
	return returnData(jsonArray.toString());

    }
}
